Published on

docker 命令走代理

Authors

docker 命令分为三种场景,dockerddocker rundocker build

通常配置all_proxyhttp_proxyhttps_proxy无法生效,需按照下面的方式配置。

如果代理地址是本机localhost,则需加入 --network host 才会生效

dockerd

拉取镜像是,其实是dockerd在执行,所以要为它配置代理,它是一个守护进程,所以要增加systemd的配置。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在proxy.conf (可以命名为任意xxx.conf文件)写入

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

docker run

docker >= 17.07

~/.docker/config.json

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080",
     "httpsProxy": "http://proxy.example.com:8080",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

docker build

docker build时注入参数

docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

重启生效

针对dockerd

sudo systemctl daemon-reload
sudo systemctl restart docker